<?php
/**
 * 公共类
 */
namespace app\admin\controller;
use think\Controller;
class Common extends Controller{

	/**
	 * 构造方法
	 */
	public function __construct(){

		//调用父级构造函数
		parent::__construct();

		//验证用户是否登录
		$id = session('id');
		if( !$id ||! session('username') ){
			$this->error('请先登录！',url('login/login'));
		}

		//获取控制器，方法名称
		$controller = request()->controller();
		$action = request()->action();

		//判断用户是否被禁用并验证权限,超级管理员用绝对权限
		if( $id != 1 && $controller!='Index' ){

			//根据用户id取得用户角色id
			$roles = db('admin_role')->where('aid',$id)->value('rid');
			
			//根据角色id获取权限列表
			$where = ['r.rid'=>['in',$roles]];
			$data = db('role')->alias('r')->field('controler_name,action_name')->join('jd_role_auth ra ','r.rid = ra.rid',"LEFT")->join('jd_auth a','ra.aid = a.aid','LEFT')->where($where)->select();

			//将获取到的权限动作名称变成小写
			$roleAuth = array_map(function( $val ){
				$val["action_name"] = strtolower($val["action_name"]);
				return $val;
			}, $data);

			//将当前访问的控制器与动作名组成一个数组
			$currentAction = ["controler_name"=>$controller,"action_name"=>$action];

			//判断当前访问的控制器与动作是否在权限列表中
			if( !in_array($currentAction, $roleAuth) ){

				$this->error('你没有权限访问此功能');

			}
			
		}
		
	}

	/**
	 * 分配变量，设置页面标头信息
	 * @param string $title  标题
	 * @param string $action 动作
	 * @param string $url    要跳转的页面地址
	 */
	public function setPageTitle( $title,$action,$url ){

		//分配变量
		$this->assign('title',$title);
		$this->assign('action',$action);
		$this->assign('url',$url);
	}

	/**
	 * 上传单个图片并可以生成多张缩略图
	 * @param  mixed $file        单文件删除传一个字符串，多文件上传传递一个对象
	 * @param  array  $size       生成缩略图尺寸
	 * @return array              返回原图及生成缩略图路径
	 */
	public function uploadOne( $file, $size=array() ){
		
		//最后要返回的数组
		$arr = [];

		if( is_string( $file ) ){
			// 获取表单上传文件 例如上传了001.jpg
	   		 $file = request()->file( $file );
		}
		
	    
	    // 移动到框架应用根目录/public/uploads/ 目录下
	    if($file){

	    	$savePath = '.'.config('upload_path').'/';

	        $info = $file->move( $savePath );

	        // 成功上传后 获取上传信息
	        if($info){

	        	// 获取原图储存路径
	            $imgPath =  $savePath.$info->getSaveName();
	            $arr['pic'] = $imgPath;
	            
	            //如果要生成缩略图
	            if( $size ){

	            	foreach ($size as $k => $v) {
	            		
		            	//打开图片
		            	$image = \think\Image::open( $imgPath );

		            	//获取存储路径信息
		            	$pathInfo = pathinfo($imgPath);

		            	//设置缩略图保存路径
		            	$thumbPath = $pathInfo['dirname'];

		            	//设置缩略图名称
		            	$thumbName = $pathInfo['filename'].'_'.$v[0].'_'.$v[1].'.'.$pathInfo['extension'];
		            	
		            	//拼凑缩略图存储路径
		            	$thumbSave = $thumbPath.'/'.$thumbName;
		            	
		            	//将图片裁剪为300x300并保存为crop.png
						$image->thumb($v[0], $v[1])->save($thumbSave);

						//保存缩略图路径
						$arr[$k] = trim($thumbSave,'.');
	            	}

	            }
	            
	            //返回整理好的缩略图储存路径
	            return $arr;
	            
	        }else{

	            // 上传失败获取错误信息
	            echo $file->getError();
	        }

	    }

	}






}
